float vs BCD v IB

Otázka od: hlas

23. 10. 2002 7:48

ked mam v IB pole Numeric 12.2 tak

ak pouzijem komponenty IBX vytvori sa mi pole typu float
ak pouzijem komponenty DBX vytvori sa mi pole BCD

radsej by som vsak pouzival float ako BCD, ale chcem pracovat
s DBExpressom. To BCD sa mi moc nepaci. Da sa to nejako obist?
Su polia BCD vhodne na pracu s menou?


----------
Teraz si uz KAZDY moze registrovat svoju domenu .SK
Viac info na: http://www.SlovakNET.sk/predregistracia.asp

Odpovedá: Pavel Zichovsky

23. 10. 2002 9:23

Zdravim,

On 23 Oct 2002 at 8:45, hlas wrote:
> ked mam v IB pole Numeric 12.2 tak
>
> radsej by som vsak pouzival float ako BCD, ale chcem pracovat
> s DBExpressom. To BCD sa mi moc nepaci. Da sa to nejako obist?
> Su polia BCD vhodne na pracu s menou?

Rekl bych, ze BCD jsou jedine vhodne na praci s
penezi, protoze tam mas zajistenou presnost na
dany pocet desetinnych mist (v tvem pripade 2). V
Delphi (aspon v D6) je na to definovan typ Currency,
se kterym muzes pracovat uplne stejne jako s float
(nasobit, delit....) ale mas vysledek vzdy presne na
dany pocet mist.

Float ze sveho principu (jak je ulozen a
interpretovan) nedokaze vyjadrit nektere desetine
hodnoty uplne presne, na posledni pozici se pridava
ci odecita 1 (napr. 0,000000001).


S pozdravem
Pavel Žichovský (zichovsky@trul.cz)

Odpovedá: hlas

23. 10. 2002 11:20

Ale jedna sa mi o kombinaciu IB - D7

pole v IB pole v Delphi

float f loat
Numeric 15,2 BCD
double precision float

tie polia v delphi si nemozem vyberat.
vyberat si mozem iba polia v IB a D7 mi samo
pri vytvarani persistetnych poli vytvori typy
podla IB.

Predtym som mal v Paradoxe Currency a
aj v delphi Currency.

Asi si vyberiem posl. variantu Double precision - float
tam mi funguju povodne procedury pisane
pre currency, ktore mi nefunguju pre BCD.

Hlas



----- Original Message -----
From: "Pavel Zichovsky" <zichovsky@trul.cz>
Rekl bych, ze BCD jsou jedine vhodne na praci s
penezi, protoze tam mas zajistenou presnost na
dany pocet desetinnych mist (v tvem pripade 2). V
Delphi (aspon v D6) je na to definovan typ Currency,
se kterym muzes pracovat uplne stejne jako s float
(nasobit, delit....) ale mas vysledek vzdy presne na
dany pocet mist.

Float ze sveho principu (jak je ulozen a
interpretovan) nedokaze vyjadrit nektere desetine
hodnoty uplne presne, na posledni pozici se pridava
ci odecita 1 (napr. 0,000000001).


S pozdravem
Pavel Žichovský (zichovsky@trul.cz)




----------
Teraz si uz KAZDY moze registrovat svoju domenu .SK
Viac info na: http://www.SlovakNET.sk/predregistracia.asp

Odpovedá: Pavel Zichovsky

23. 10. 2002 12:12

Zdravim,

On 23 Oct 2002 at 11:58, hlas wrote:

> Ale jedna sa mi o kombinaciu IB - D7
>
> pole v IB pole v Delphi
>
> float f loat
> Numeric 15,2 BCD
> double precision float
>
> tie polia v delphi si nemozem vyberat.
> vyberat si mozem iba polia v IB a D7 mi samo
> pri vytvarani persistetnych poli vytvori typy
> podla IB.

Numeric 15,2 je BCD, a to muzes bezeztraty
pretypovat na Currency.
(filedbyname(blabla).ascurrency)

> Asi si vyberiem posl. variantu Double precision - float
> tam mi funguju povodne procedury pisane
> pre currency, ktore mi nefunguju pre BCD.

Na penize ti nepomuze ani double precision, i tam
jsou problemy s vyjadrenim nekterych desetiny cisel
(i kdyz mensi). Pretypuj si to BCD na Currency a
pouzivej to.


S pozdravem
Pavel Žichovský (zichovsky@trul.cz)

Odpovedá: hlas

23. 10. 2002 20:44

Asi mas pravdu, ale zda sa mi to dost neprakticke.
Keby som urobil v IB pole Numeric 15,2 a delphi spravilo
pole TCurrency tak by to bolo ok.
Ale delphi mi spravi pole TFMTBCDField a nic s nim nekomunikuje.

To mam robit takto? :

var x:currency ;
     i:integer;

x:=i*filedbyname(blabla).ascurrency;

A ako vlozim to takeho pola hodnotu? Toto myslim nefunguje:


filedbyname(blabla).value:=x;

to mam pretypovavat cez CurrToBCD

filedbyname(blabla).Value:=CurrToBCD.....

Dost neprijemna robota nie?
Nebude to spomalovat, ci to je zanedbatelne?

Pozn. Blabla bolo pole typu TFMTBCDField

Hlas

----- Original Message -----
From: "Pavel Zichovsky" <zichovsky@trul.cz>
To: <delphi-l@clexpert.cz>
Sent: Wednesday, October 23, 2002 12:23 PM
Subject: Re: float vs BCD v IB


Zdravim,

On 23 Oct 2002 at 11:58, hlas wrote:

> Ale jedna sa mi o kombinaciu IB - D7
>
> pole v IB pole v Delphi
>
> float f loat
> Numeric 15,2 BCD
> double precision float
>
> tie polia v delphi si nemozem vyberat.
> vyberat si mozem iba polia v IB a D7 mi samo
> pri vytvarani persistetnych poli vytvori typy
> podla IB.

Numeric 15,2 je BCD, a to muzes bezeztraty
pretypovat na Currency.
(filedbyname(blabla).ascurrency)

> Asi si vyberiem posl. variantu Double precision - float
> tam mi funguju povodne procedury pisane
> pre currency, ktore mi nefunguju pre BCD.

Na penize ti nepomuze ani double precision, i tam
jsou problemy s vyjadrenim nekterych desetiny cisel
(i kdyz mensi). Pretypuj si to BCD na Currency a
pouzivej to.


S pozdravem
Pavel Žichovský (zichovsky@trul.cz)


Odpovedá: Pavel Zichovsky

23. 10. 2002 20:32

Zdravim,

On 23 Oct 2002 at 14:52, hlas wrote:

> Asi mas pravdu, ale zda sa mi to dost neprakticke.
> Keby som urobil v IB pole Numeric 15,2 a delphi spravilo
> pole TCurrency tak by to bolo ok.
> Ale delphi mi spravi pole TFMTBCDField a nic s nim nekomunikuje.

Protoze to pole je v IB typy Numeric, a ne Currency
jako v Paradoxu   I kdyz v podstate je to to same
(asopn co se tyce zpusobu ulozeni dat)  

> To mam robit takto? :
>
> var x:currency ;
> i:integer;
>
> x:=i*filedbyname(blabla).ascurrency;

Ano, ale pokud budes tu hodnotu pole pouzivat
casteji v nekolika vypoctech, je lepsi

var x,h:currency;
   i:integer;

h:=filedbyname(blabla).ascurrency;
x:=i*h;
....

> A ako vlozim to takeho pola hodnotu? Toto myslim nefunguje:
> filedbyname(blabla).value:=x;

Funguje filedbyname(blabla).ascurrency:=x;

> to mam pretypovavat cez CurrToBCD

Nemusis (viz radek vyse  

> Dost neprijemna robota nie?
> Nebude to spomalovat, ci to je zanedbatelne?

Nevim, pouzivam pristup k polim pomoci asxxx dost
casto, a nezda se mi to pomale   Ale pouzivam
to, ze kdyz tu hodnotu potrebuju nekolikrat za
sebou, tak si ji na zacatku hodim do promenne, a
zmenu do pole ukladam az na konci zpracovani.


S pozdravem
Pavel Žichovský (zichovsky@trul.cz)

Odpovedá: Karel Rys

24. 10. 2002 7:47

Ahoj,

hlas dne 23 Oct 2002 v 14:52:

> Asi mas pravdu, ale zda sa mi to dost neprakticke.
> Keby som urobil v IB pole Numeric 15,2 a delphi spravilo
> pole TCurrency tak by to bolo ok.
> Ale delphi mi spravi pole TFMTBCDField a nic s nim nekomunikuje.

myslim ze jsem nekde videl zminku, ze starsi IBX komponenty se takto chovaly.
Novejsi verze mi
vytvari tIBBCDField, ktere vraci hodnotu typu currency.

Karel Rys

Odpovedá: Marek Dostál

24. 10. 2002 17:00

> Asi mas pravdu, ale zda sa mi to dost neprakticke.
> Keby som urobil v IB pole Numeric 15,2 a delphi spravilo
> pole TCurrency tak by to bolo ok.
> Ale delphi mi spravi pole TFMTBCDField a nic s nim nekomunikuje.
>
> To mam robit takto? :
>
> var x:currency ;
> i:integer;
>
> x:=i*filedbyname(blabla).ascurrency;
>
> A ako vlozim to takeho pola hodnotu? Toto myslim nefunguje:
>
>
> filedbyname(blabla).value:=x;


Jednoduse to udelaj takto: filedbyname(blabla).AsFloat:=x;